#include "BulletCollision/CollisionDispatch/btConvexConcaveCollisionAlgorithm.h"
#ifdef __cplusplus
extern "C" {
#endif
btConvexTriangleCallback* bullet_NewbtConvexTriangleCallback(btDispatcher* dispatcher,btCollisionObjectWrapper* body0Wrap,btCollisionObjectWrapper* body1Wrap,bool isSwapped){
	btDispatcher * c_arg_dispatcher=(btDispatcher *)(void*)(dispatcher);
	btCollisionObjectWrapper const * c_arg_body0Wrap=(btCollisionObjectWrapper const *)(void*)(body0Wrap);
	btCollisionObjectWrapper const * c_arg_body1Wrap=(btCollisionObjectWrapper const *)(void*)(body1Wrap);
	bool c_arg_isSwapped=isSwapped;
	btConvexTriangleCallback* wrap_out = new btConvexTriangleCallback(c_arg_dispatcher,c_arg_body0Wrap,c_arg_body1Wrap,c_arg_isSwapped);
	return wrap_out;
}

void bullet_btConvexTriangleCallback_clearCache(btConvexTriangleCallback* c_this){
	c_this->clearCache();
}

void bullet_btConvexTriangleCallback_clearWrapperData(btConvexTriangleCallback* c_this){
	c_this->clearWrapperData();
}

btVector3* bullet_btConvexTriangleCallback_getAabbMax(btConvexTriangleCallback* c_this){
	btVector3 const& c_out = c_this->getAabbMax();
	btVector3* wrap_out = (btVector3*)(&c_out);
	return wrap_out;
}

btVector3* bullet_btConvexTriangleCallback_getAabbMin(btConvexTriangleCallback* c_this){
	btVector3 const& c_out = c_this->getAabbMin();
	btVector3* wrap_out = (btVector3*)(&c_out);
	return wrap_out;
}

btPersistentManifold** bullet_btConvexTriangleCallback_GetFieldOfM_manifoldPtr(btConvexTriangleCallback* c_this){
	return (btPersistentManifold**)(&c_this->m_manifoldPtr);
}

int bullet_btConvexTriangleCallback_GetFieldOfM_triangleCount(btConvexTriangleCallback* c_this){
	return (int)(c_this->m_triangleCount);
}

void bullet_btConvexTriangleCallback_setTimeStepAndCounters(btConvexTriangleCallback* c_this,double collisionMarginTriangle,btDispatcherInfo* dispatchInfo,btCollisionObjectWrapper* convexBodyWrap,btCollisionObjectWrapper* triBodyWrap,btManifoldResult* resultOut){
	btScalar c_arg_collisionMarginTriangle=collisionMarginTriangle;
	btDispatcherInfo const& c_arg_dispatchInfo=(btDispatcherInfo const&)(*dispatchInfo);
	btCollisionObjectWrapper const * c_arg_convexBodyWrap=(btCollisionObjectWrapper const *)(void*)(convexBodyWrap);
	btCollisionObjectWrapper const * c_arg_triBodyWrap=(btCollisionObjectWrapper const *)(void*)(triBodyWrap);
	btManifoldResult * c_arg_resultOut=(btManifoldResult *)(void*)(resultOut);
	c_this->setTimeStepAndCounters(c_arg_collisionMarginTriangle,c_arg_dispatchInfo,c_arg_convexBodyWrap,c_arg_triBodyWrap,c_arg_resultOut);
}

btConvexConcaveCollisionAlgorithm::SwappedCreateFunc* bullet_NewbtConvexConcaveCollisionAlgorithmSwappedCreateFunc(){
	btConvexConcaveCollisionAlgorithm::SwappedCreateFunc* wrap_out = new btConvexConcaveCollisionAlgorithm::SwappedCreateFunc();
	return wrap_out;
}

btConvexConcaveCollisionAlgorithm::CreateFunc* bullet_NewbtConvexConcaveCollisionAlgorithmCreateFunc(){
	btConvexConcaveCollisionAlgorithm::CreateFunc* wrap_out = new btConvexConcaveCollisionAlgorithm::CreateFunc();
	return wrap_out;
}

btConvexConcaveCollisionAlgorithm* bullet_NewbtConvexConcaveCollisionAlgorithm(btCollisionAlgorithmConstructionInfo* ci,btCollisionObjectWrapper* body0Wrap,btCollisionObjectWrapper* body1Wrap,bool isSwapped){
	btCollisionAlgorithmConstructionInfo const& c_arg_ci=(btCollisionAlgorithmConstructionInfo const&)(*ci);
	btCollisionObjectWrapper const * c_arg_body0Wrap=(btCollisionObjectWrapper const *)(void*)(body0Wrap);
	btCollisionObjectWrapper const * c_arg_body1Wrap=(btCollisionObjectWrapper const *)(void*)(body1Wrap);
	bool c_arg_isSwapped=isSwapped;
	btConvexConcaveCollisionAlgorithm* wrap_out = new btConvexConcaveCollisionAlgorithm(c_arg_ci,c_arg_body0Wrap,c_arg_body1Wrap,c_arg_isSwapped);
	return wrap_out;
}

void bullet_btConvexConcaveCollisionAlgorithm_clearCache(btConvexConcaveCollisionAlgorithm* c_this){
	c_this->clearCache();
}

#ifdef __cplusplus
}
#endif
